Influencia de Carácteristicas sobre los niveles de concentración de PM10 estación Compartir #
Importación de Librerías
# Load libraries
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Load sklearn
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Lasso
from sklearn.linear_model import ElasticNet
from sklearn.tree import DecisionTreeRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.svm import SVR
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.ensemble import ExtraTreesRegressor
from sklearn.ensemble import AdaBoostRegressor
from sklearn.metrics import mean_squared_error
import warnings
warnings.filterwarnings("ignore")
A continuación usamos la función read_cvs() de la libreria pandaspara cargar los datos a nuestro entorno de trabajo.
df = pd.read_csv("data_2017_2022.csv", sep=";")
df_1 = df.copy()
df_1["medicion"]=df_1["medicion"].str.replace(",", ".").astype("float") # convertir variable medición a númerica
df_1['fecha'] = pd.to_datetime(df_1['fecha']) # convertir variable fecha a datatime
df_1 = df_1.pivot(index=["fecha", "estacion"],columns= "variable", values="medicion").reset_index()
Para más practicidad se renombran las variables de nuestro conjunto de datos.
df_1 = df_1.rename(columns={
'variable': 'var',
'black_carbon': 'BC',
'direccion_viento': 'WD',
'humedad': 'HR',
'lluvia': 'RF',
'presion': 'P',
'radiacion_solar': 'RS',
'temperatura': 'AT',
'temperatura_10_m': 'AT_10_m',
'uv-pm': 'UV',
'velocidad_viento': 'WS',
'h2s': 'H2S',
'no2': 'NO2',
'o3': 'O3',
'so2': 'SO2',
'pm10': 'PM10',
'pm25': 'PM2.5'
})
Dado que la variable la variable \(\text{NO}_2\) tiene solo \(1\) medición entre \(473.256\) registros durante el periodo analizado, lo que representa casi un \(100\%\) de datos faltantes, hemos optado por excluirla del análisis.
df_t = df_1.copy()
df_t = df_t.drop(columns=["NO2"])
df_compartir = df_t[df_t['estacion'] == 'compartir']
A continuación, se llevará a cabo un análisis para validar la influencia de las características y determinar cuáles de ellas tienen un impacto significativo en los niveles de concentración de PM10, utilizando los datos de la Estación Compartir.
Influencia de dirección y velocidad del viento sobre la concentración de PM10 #
A continuación, se muestra cómo la dirección y la velocidad del viento pueden influir en las concentraciones de PM10.
import pandas as pd
import plotly.graph_objs as go
# Crear el gráfico de dispersión 3D en Plotly
fig = go.Figure(data=[go.Scatter3d(
x=df_compartir['WD'],
y=df_compartir['WS'],
z=df_compartir['PM10'],
mode='markers',
marker=dict(
size=5,
color=df_compartir['PM10'], # Colores según los valores de PM10
colorscale='Viridis', # Mismo colormap que en matplotlib
opacity=0.8
)
)])
# Actualizar el layout del gráfico para etiquetas y título
fig.update_layout(
scene=dict(
xaxis_title='Dirección del Viento',
yaxis_title='Velocidad del Viento',
zaxis_title='Concentración de PM10'
),
title='Influencia de la Dirección y Velocidad del Viento sobre PM10',
width=800,
height=600
)
# Mostrar el gráfico
fig.show()
Se observa que la dirección del viento no tiene un impacto significativo en los niveles de concentración de PM10. Sin embargo, se aprecia un ligero patrón en la velocidad del viento: a velocidades más bajas, los datos tienden a concentrarse más, y la relación entre la velocidad del viento y la concentración de PM10 muestra un sesgo hacia la derecha.
Influencia de la velocidad del viento y la precipitación en las concentraciones de PM10 #
A continuación, se muestra cómo la velocidad del viento y la intensidad de la lluvia pueden influir en las concentraciones de PM10.
import pandas as pd
import plotly.graph_objs as go
# Crear el gráfico de dispersión 3D en Plotly
fig = go.Figure(data=[go.Scatter3d(
x=df_compartir['WS'],
y=df_compartir['RF'],
z=df_compartir['PM10'],
mode='markers',
marker=dict(
size=5,
color=df_compartir['PM10'], # Colores según los valores de PM10
colorscale='Viridis', # Mismo colormap que en matplotlib
opacity=0.8
)
)])
# Actualizar el layout del gráfico para etiquetas y título
fig.update_layout(
scene=dict(
xaxis_title='Velocidad del Viento',
yaxis_title='Precipitación en mm',
zaxis_title='Concentración de PM10'
),
title='Influencia de Velocidad del Viento y Precipitación sobre PM10',
width=800,
height=600
)
# Mostrar el gráfico
fig.show()
Se observa un patrón leve en la relación entre la velocidad del viento, la precipitación y la concentración de PM10. A velocidades de viento más bajas y con lluvias ligeras las concentraciones de PM10 tienen a aumentar, mientras que con mayores precipitaciones y velocidades de viento, la concentración de PM10 tiende a dispersarse y disminuir, evidenciando un sesgo hacia la derecha.
Influencia de la Presión y Temperatura Ambiente en las concentraciones de PM10 #
A continuación, se muestra cómo la humedad relativa y la temperatura pueden influir en las concentraciones de PM10.
import pandas as pd
import plotly.graph_objs as go
# Crear el gráfico de dispersión 3D en Plotly
fig = go.Figure(data=[go.Scatter3d(
x=df_compartir['P'],
y=df_compartir['AT'],
z=df_compartir['PM10'],
mode='markers',
marker=dict(
size=5,
color=df_compartir['PM10'], # Colores según los valores de PM10
colorscale='Viridis', # Mismo colormap que en matplotlib
opacity=0.8
)
)])
# Actualizar el layout del gráfico para etiquetas y título
fig.update_layout(
scene=dict(
xaxis_title='Presión',
yaxis_title='Temperatura Ambiente',
zaxis_title='Concentración de PM10'
),
title='Influencia de Presión y Temperatura Ambiente sobre PM10',
width=800,
height=600
)
# Mostrar el gráfico
fig.show()
Dado el comportamiento inusual en los registros de presión, con valores que oscilan entre 900 hPa y 680 hPa, lo cual podría estar relacionado con la presencia de tormentas tropicales, se procederá a realizar un análisis más exhaustivo de la presión atmosférica. El objetivo es validar si alguna condición ambiental específica pudo haber causado esta anomalía.
Nota: La variación mencionada es bastante extrema para una situación normal, por lo que sería importante confirmar la precisión de los datos o considerar otras posibles causas antes de concluir una relación directa con tormentas tropicales.
import pandas as pd
import plotly.graph_objs as go
# Crear el gráfico de dispersión 3D en Plotly
fig = go.Figure(data=[go.Scatter3d(
x=df_compartir['RF'],
y=df_compartir['AT'],
z=df_compartir['P'],
mode='markers',
marker=dict(
size=5,
color=df_compartir['PM10'], # Colores según los valores de PM10
colorscale='Viridis', # Mismo colormap que en matplotlib
opacity=0.8
)
)])
# Actualizar el layout del gráfico para etiquetas y título
fig.update_layout(
scene=dict(
xaxis_title='Lluvia',
yaxis_title='Temperatura Ambiente',
zaxis_title='Presion'
),
title='Influencia de Presión y Temperatura Ambiente sobre la intensidad de Lluvia',
width=800,
height=600
)
# Mostrar el gráfico
fig.show()
Se observa que la intensidad de las precipitaciones no tiene un impacto significativo en la presión atmosférica. Sin embargo, se identifica un ligero patrón en la temperatura ambiente: a medida que aumenta la intensidad de la lluvia, la temperatura tiende a disminuir. No se detecta un patrón claro en relación con la presión atmosférica, lo que sugiere que la discrepancia en las mediciones podría deberse a errores de medición. Es posible que el barómetro utilizado para registrar las mediciones estuviera desajustado durante el período comprendido entre 2017 y octubre de 2019, dado que las presiones registradas no son normales y claramente no fueron producto de tormentas tropicales o cambios atmosféricos drasticos.
Influencia de la Precipitación y Humedad Relativa en las concentraciones de PM10 #
import pandas as pd
import plotly.graph_objs as go
# Crear el gráfico de dispersión 3D en Plotly
fig = go.Figure(data=[go.Scatter3d(
x=df_compartir['RF'],
y=df_compartir['HR'],
z=df_compartir['PM10'],
mode='markers',
marker=dict(
size=5,
color=df_compartir['PM10'], # Colores según los valores de PM10
colorscale='Viridis', # Mismo colormap que en matplotlib
opacity=0.8
)
)])
# Actualizar el layout del gráfico para etiquetas y título
fig.update_layout(
scene=dict(
xaxis_title='Precipitación en mm',
yaxis_title='Humedad Relativa',
zaxis_title='Concentración de PM10'
),
title='Influencia de Humedad Relativa y Precipitación sobre PM10',
width=800,
height=600
)
# Mostrar el gráfico
fig.show()
Se observa que la humedad relativa no tiene un impacto significativo en la concentración de PM10. Sin embargo, cuando se producen lluvias intensas, las concentraciones de PM10 tienden a disminuir.
Influencia de la Radiación Solar y Ozono en las concentraciones de PM10 #
import pandas as pd
import plotly.graph_objs as go
# Crear el gráfico de dispersión 3D en Plotly
fig = go.Figure(data=[go.Scatter3d(
x=df_compartir['RS'],
y=df_compartir['O3'],
z=df_compartir['PM10'],
mode='markers',
marker=dict(
size=5,
color=df_compartir['PM10'], # Colores según los valores de PM10
colorscale='Viridis', # Mismo colormap que en matplotlib
opacity=0.8
)
)])
# Actualizar el layout del gráfico para etiquetas y título
fig.update_layout(
scene=dict(
xaxis_title='Radiación Solar',
yaxis_title='Concentración de Ozono',
zaxis_title='Concentración de PM10'
),
title='Influencia de Humedad Relativa y Concentración de Ozono sobre PM10',
width=800,
height=600
)
# Mostrar el gráfico
fig.show()
Se observa un patrón en la relación entre la concentración de ozono, la radiación solar y la concentración de PM10. A medida que aumenta la radiación solar, tiende a incrementarse la concentración de ozono, mientras que la concentración de PM10 suele disminuir. Esto se debe a que la radiación solar favorece las reacciones fotoquímicas que producen ozono, mientras que también puede contribuir a la dispersión de partículas PM10. Por otro lado, cuando los niveles de radiación solar disminuyen, se observa una reducción en la concentración de ozono y un posible aumento en la concentración de PM10.